/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import javax.faces.context.FacesContext;

public class EnvioPedido implements Serializable {
    private int codigoEnvio;
    private String receptorEnvio;
    private String ciudadEnvio;
    private String direccionEnvio;
    private String referenciaEnvio;
    private String telefonoReceptor;
    private String mensajeEnvio;
    private String motivoEnvio;
    private Date fechaEntrega;
    private String horaEntrega;//rango de hora
    private Date fechaRegistro;
    private String razonSocialReceptor;
    private String rucReceptor;
    private String etadoEnvio;
    private boolean retorno;
    private String opcionPagoPedido;//opcion=1 =>Tarjeta,opcion=1 =>deposito
    private String numeroTarjeta;//auxiliar
    private String cvcTarjeta;//auxiliar
    private String numeroCuenta;//auxiliar


    public EnvioPedido() {
    }

    public String getOpcionPagoPedido() {
        return opcionPagoPedido;
    }

    public void setOpcionPagoPedido(String opcionPagoPedido) {
        this.opcionPagoPedido = opcionPagoPedido;
    }   

    public boolean isRetorno() {
        return retorno;
    }

    public void setRetorno(boolean retorno) {
        this.retorno = retorno;
    }


    public int getCodigoEnvio() {
        return codigoEnvio;
    }

    public void setCodigoEnvio(int codigoEnvio) {
        this.codigoEnvio = codigoEnvio;
    }

    public String getReceptorEnvio() {
        return receptorEnvio;
    }

    public void setReceptorEnvio(String receptorEnvio) {
        this.receptorEnvio = receptorEnvio;
    }

    public String getCiudadEnvio() {
        return ciudadEnvio;
    }

    public void setCiudadEnvio(String ciudadEnvio) {
        this.ciudadEnvio = ciudadEnvio;
    }

    public String getDireccionEnvio() {
        return direccionEnvio;
    }

    public void setDireccionEnvio(String direccionEnvio) {
        this.direccionEnvio = direccionEnvio;
    }

    public String getReferenciaEnvio() {
        return referenciaEnvio;
    }

    public void setReferenciaEnvio(String referenciaEnvio) {
        this.referenciaEnvio = referenciaEnvio;
    }

    public String getTelefonoReceptor() {
        return telefonoReceptor;
    }

    public void setTelefonoReceptor(String telefonoReceptor) {
        this.telefonoReceptor = telefonoReceptor;
    }

    public String getMensajeEnvio() {
        return mensajeEnvio;
    }

    public void setMensajeEnvio(String mensajeEnvio) {
        this.mensajeEnvio = mensajeEnvio;
    }

    public String getMotivoEnvio() {
        return motivoEnvio;
    }

    public void setMotivoEnvio(String motivoEnvio) {
        this.motivoEnvio = motivoEnvio;
    }

    public Date getFechaEntrega() {
        return fechaEntrega;
    }

    public void setFechaEntrega(Date fechaEntrega) {
        this.fechaEntrega = fechaEntrega;
    }

    public String getHoraEntrega() {
        return horaEntrega;
    }

    public void setHoraEntrega(String horaEntrega) {
        this.horaEntrega = horaEntrega;
    }

    public String getRazonSocialReceptor() {
        return razonSocialReceptor;
    }

    public void setRazonSocialReceptor(String razonSocialReceptor) {
        this.razonSocialReceptor = razonSocialReceptor;
    }

    public String getRucReceptor() {
        return rucReceptor;
    }

    public void setRucReceptor(String rucReceptor) {
        this.rucReceptor = rucReceptor;
    }

    public String getEtadoEnvio() {
        return etadoEnvio;
    }

    public void setEtadoEnvio(String etadoEnvio) {
        this.etadoEnvio = etadoEnvio;
    }

    public Date getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(Date fechaRegistro) {
        this.fechaRegistro = fechaRegistro;
    }

    public String getNumeroTarjeta() {
        return numeroTarjeta;
    }

    public void setNumeroTarjeta(String numeroTarjeta) {
        this.numeroTarjeta = numeroTarjeta;
    }

    public String getCvcTarjeta() {
        return cvcTarjeta;
    }

    public void setCvcTarjeta(String cvcTarjeta) {
        this.cvcTarjeta = cvcTarjeta;
    }

    public String getNumeroCuenta() {
        return numeroCuenta;
    }

    public void setNumeroCuenta(String numeroCuenta) {
        this.numeroCuenta = numeroCuenta;
    }

    
 
         //actualizar el estado de un envio
      public static boolean actualizarEstadoEnvio(EnvioPedido a){
            boolean estado=false;
            Connection conexion=null;
            try{
               conexion=ControladorBD.darConexionBD();
               CallableStatement st=conexion.prepareCall("{call sp_actualizarEstadoEnvio(?,?,?)}");
               
               st.setInt(1,a.getCodigoEnvio());
               st.setString(2,a.getEtadoEnvio());
               st.registerOutParameter(3,java.sql.Types.BOOLEAN);
               st.execute();
                a.setRetorno(st.getBoolean(3));
                if(a.isRetorno()==true)
                {
                    estado=true;
                }
                conexion.close();
            }catch(Exception error){
                    System.out.println("Error en el metodo por: " + error.getMessage());
                    error.printStackTrace();
            }
            
            return estado;
    }
      
     //listar todos los envios
     public static ArrayList<EnvioPedido> getListarEnviosPedido(){ 
     ArrayList<EnvioPedido> arreglo = new ArrayList<EnvioPedido>();
    if (arreglo.size()==0){         
        EnvioPedido obj=null;
    Connection conexion = null;
    ResultSet rs = null;
    try{
    conexion = ControladorBD.darConexionBD();
    CallableStatement st = conexion.prepareCall
  ( "{call sp_listarEnvios()}");    
    rs = st.executeQuery();        
    if (rs.next()){          
        do{
        obj =new EnvioPedido();
        obj.setCodigoEnvio(rs.getInt("codigoEnvio"));
        obj.setReceptorEnvio(rs.getString("receptorEnvio"));
        obj.setCiudadEnvio(rs.getString("ciudadEnvio"));
        obj.setDireccionEnvio(rs.getString("direccionEnvio"));
        obj.setReferenciaEnvio(rs.getString("referenciaEnvio"));
        obj.setTelefonoReceptor(rs.getString("telefonoReceptor"));
        obj.setMensajeEnvio(rs.getString("mensajeEnvio"));
        obj.setFechaEntrega(rs.getDate("fechaEntrega"));
        obj.setHoraEntrega(rs.getString("horaEntrega"));
        obj.setFechaRegistro(rs.getDate("fechaRegistro"));
        obj.setRazonSocialReceptor(rs.getString("razonSocialReceptor"));
        obj.setRucReceptor(rs.getString("rucReceptor"));
        obj.setEtadoEnvio(rs.getString("estadoEnvio"));
        arreglo.add(obj);
       } while (rs.next());
    }  
         rs.close();
         st.close();
         conexion.close();

     }catch(Exception error){
        System.out.println("Error en el metodo por: " +
                   error.getMessage());
                error.printStackTrace();
        }    
      }  
    return arreglo;
    } 
     
     //listar los envios segun fecha
     public static ArrayList<EnvioPedido> getListarEnviosPedidoxFechaSolicitud(EnvioPedido a){ 
     ArrayList<EnvioPedido> arreglo = new ArrayList<EnvioPedido>();
    if (arreglo.size()==0){         
        EnvioPedido obj=null;
    Connection conexion = null;
    ResultSet rs = null;
    try{
    conexion = ControladorBD.darConexionBD();
    CallableStatement st = conexion.prepareCall
  ( "{call sp_listarEnviosxFechaSolicitud(?)}");  
    st.setDate(1,new java.sql.Date(a.getFechaRegistro().getTime()));  
    rs = st.executeQuery();        
    if (rs.next()){          
        do{
        obj =new EnvioPedido();
        obj.setCodigoEnvio(rs.getInt("codigoEnvio"));
        obj.setReceptorEnvio(rs.getString("receptorEnvio"));
        obj.setCiudadEnvio(rs.getString("ciudadEnvio"));
        obj.setDireccionEnvio(rs.getString("direccionEnvio"));
        obj.setReferenciaEnvio(rs.getString("referenciaEnvio"));
        obj.setTelefonoReceptor(rs.getString("telefonoReceptor"));
        obj.setMensajeEnvio(rs.getString("mensajeEnvio"));
        obj.setFechaEntrega(rs.getDate("fechaEntrega"));
        obj.setHoraEntrega(rs.getString("horaEntrega"));
        obj.setFechaRegistro(rs.getDate("fechaRegistro"));
        obj.setRazonSocialReceptor(rs.getString("razonSocialReceptor"));
        obj.setRucReceptor(rs.getString("rucReceptor"));
        obj.setEtadoEnvio(rs.getString("estadoEnvio"));
        arreglo.add(obj);
       } while (rs.next());
    }  
         rs.close();
         st.close();
         conexion.close();

     }catch(Exception error){
        System.out.println("Error en el metodo por: " +
                   error.getMessage());
                error.printStackTrace();
        }    
      }  
    return arreglo;
    }
     
     //registrar
     public static boolean registrarEnvioPedido (EnvioPedido a)
    {
        boolean estado = false ;
        Connection conexion=null;
        
        FacesContext contex = FacesContext.getCurrentInstance();
        String codPersona=contex.getExternalContext().getSessionMap().get("codigoPersona").toString();
        System.out.println("codigo person registrarEnvioPedido: "+codPersona);
        
         try{
             conexion=ControladorBD.darConexionBD();
             CallableStatement st=conexion.prepareCall(" {call sp_registrarEnvioPedido "
                     +"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)} ");
             st.setString(1,a.getReceptorEnvio());
             st.setString(2,a.getCiudadEnvio());
             st.setString(3,a.getDireccionEnvio());
             st.setString(4,a.getReferenciaEnvio());
             st.setString(5,a.getTelefonoReceptor());
             st.setString(6,a.getMensajeEnvio());
             st.setString(7,a.getMotivoEnvio());
             st.setDate(8, new java.sql.Date(a.getFechaEntrega().getTime()));
             st.setString(9,a.getHoraEntrega());
             st.setString(10,a.getRazonSocialReceptor());
             st.setString(11, a.getRucReceptor());
             st.setString(12, codPersona);
             st.setString(13, a.getNumeroTarjeta());
             st.setString(14, a.getCvcTarjeta());
             st.setString(15, a.getNumeroCuenta());
             st.setString(16, a.getOpcionPagoPedido());
             st.registerOutParameter(17,java.sql.Types.BOOLEAN);
             st.execute();
             a.setRetorno(st.getBoolean(13));
             if(a.isRetorno()==true)
             {
                 estado=true;
             }
        st.close();
        conexion.close();
             
         } catch(Exception error){
             System.out.println("Error en el metodo por: "+ error.getMessage());
                                 error.printStackTrace();
         }
         
        return estado;  
        
    }
     
     
}
